// 引入 Koa
const Koa = require('koa')
// 路由
const router = require('koa-router')()
// 解析 POST 请求 bodyParser 用于 Post 请求
const parser = require('koa-parser')
// 允许跨域
const cors = require('koa2-cors')
// 模拟数据
const Mock = require('mockjs')
// 端口号
const port = 3000

const app = new Koa() // 创建 web 应用实例

// 安装插件 parser 和 cors
app.use(parser())
app.use(cors())

// 使用 Mock 模拟数据
const data = Mock.mock({
  'students|20': [
    {
      'id|+1': 1,
      'name': '@cname',
      'age|5-20': 0
    }
  ]
})

// api 接口

// 用户登录
// 模拟的用户账户
const user = [
  {
    username: 'admin1',
    password: '123456',
    data: {
      nickname: '俱往矣i',
      photo: 'http://r.photo.store.qq.com/psc?/V52OzcjM296N4D3IEo5e1DfOQZ1pM1IO/45NBuzDIW489QBoVep5mcQy2B2YFlT1RLRHihM9ad7lpFJGoQQE5khd*kn0j*bnbIzPkplEqpg*mdY5SN4ozHzIYE*6gVTjrWxP6Ly1GbTg!/r'
    }
  },
  {
    username: 'admin2',
    password: '123456',
    data: {
      nickname: '西瓜',
      photo: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic1.zhimg.com%2F50%2Fv2-e73ebe5fb7fbae39d69ed94dcc82f145_hd.jpg&refer=http%3A%2F%2Fpic1.zhimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1620788382&t=244002712276efd5c9bed25cac10b0db'
    }
  },
  {
    username: 'admin3',
    password: '123456',
    data: {
      nickname: '豹子头',
      photo: 'https://pics7.baidu.com/feed/a8773912b31bb051fb37de05c78e64b24bede083.jpeg?token=f02d22e51399a01c6c239e6247cec44f'
    }
  },
  {
    username: 'admin4',
    password: '123456',
    data: {
      nickname: '我可爱吗',
      photo: 'https://img0.baidu.com/it/u=3155998395,3600507640&fm=26&fmt=auto&gp=0.jpg'
    }
  }
]
router.post('/admin/login', ctx => {
  // 先获取传递来的用户名和密码
  const { username, password } = ctx.request.body
  for (let i = 0; i < user.length; i++) {
    if (user[i].username === username && user[i].password === password) {
      ctx.body = {
        msg: '登录成功',
        code: 201,
        userInfo: user[i].data
      }
      return
    }
  }
  // 登录失败
  ctx.body = {
    msg: '用户名或密码错误'
  }
})

// 学员列表
router.get('/student/list', ctx => {
  // 响应数据
  ctx.body = data
})

// 学员详细信息
router.get('/student/detail/:id', ctx => {
  // 将数组中的特定数据发送给用户
  // 通过 id 在数组中找到数据发送给前端
  // 1. 获取 id
  // 这里获取到的 id 是字符串 需要转换成数组才可以进行下面的全等
  const id = parseInt(ctx.params.id)
  // 2. 通过 id 获取数据
  for (let i = 0; i < data.students.length; i++) {
    if (id === data.students[i].id) {
      ctx.body = data.students[i]
      return
    }
  }
  // 如果参数错误提示内容
  ctx.body = {
    msg: '找不到你所请求的数据'
  }
})

// 添加学员信息
router.post('/student/insert', ctx => {
  // 获取前端添加的数据
  const newStudent = ctx.request.body
  if (newStudent.name === '' || newStudent.age === '') {
    ctx.body = {
      msg: '添加失败'
    }
    return
  }
  // 最新添加的数据 id 应该是原数组最后一个元素 id + 1
  const len = data.students.length
  newStudent.id = data.students[len - 1].id + 1
  data.students.push(newStudent)

  ctx.body = {
    msg: '添加成功',
    data
  }
})

// 更新学员信息
router.put('/student/update/:id', ctx => {
  // 1. 要知道更新哪一条数据 根据 id 判断
  const id = parseInt(ctx.params.id)

  // 2. 获取数据并且更新
  const { name, age } = ctx.request.body

  for (let i = 0; i < data.students.length; i++) {
    if (id === data.students[i].id) {
      data.students[i].name = name
      data.students[i].age = age

      // 更新成功
      ctx.body = {
        msg: '更新成功'
      }
      return
    }
  }
  // 更新失败
  ctx.body = {
    msg: '更新失败'
  }
})

// 删除学员信息
router.delete('/student/delete/:id', ctx => {
  const id = parseInt(ctx.params.id)
  for (let i = 0; i < data.students.length; i++) {
    if (id === data.students[i].id) {
      data.students.splice(i, 1)
      ctx.body = {
        msg: '删除学员成功'
      }
      return
    }
  }
  ctx.body = {
    msg: '删除学员失败'
  }
})

// 更新用户头像
router.patch('/admin/userPhoto/:username', ctx => {
  const username = ctx.params.username

  // 拿到数据
  const photo = ctx.request.body.photo

  for (let i = 0; i < user.length; i++) {
    if (user[i].username === username) {
      user[i].data.photo = photo
      ctx.body = {
        msg: '更新成功'
      }
      return
    }
  }
  ctx.body = {
    msg: '更新失败'
  }
})

// 安装注册路由
app.use(router.routes())

app.listen(port, () => {
  console.log(`已经启动在 ${port} 端口`)
})
